From 9bac5f5ccd8920d6a0ed624d54880677b10dc1a7 Mon Sep 17 00:00:00 2001 From: Julien Grall Date: Wed, 11 Mar 2015 14:05:25 +0100 Subject: [PATCH] passthrough: share_p2m: fix build failure on ARM The commit 7978429 "iommu: fix usage of shared EPT/IOMMU page tables on PVH guests" breaks the hypervisor compilation on ARM. This is because the macro hap_enabled is not defined on ARM. On x86, the P2M can only be shared when hap is enabled and the user didn't deny it (via the command line). Those checks are done by iommu_use_hap_pt(). On ARM, the macro iommu_use_hap_pt() is also defined. So move the if ( iommu_use_hap_pt(d) ) from the IOMMU drivers up to iommu_share_p2m_table. Suggested-by: Jan Beulich Signed-off-by: Julien Grall Reviewed-by: Ian Campbell --- xen/drivers/passthrough/amd/iommu_map.c | 3 --- xen/drivers/passthrough/iommu.c | 3 +-- xen/drivers/passthrough/vtd/iommu.c | 3 --- 3 files changed, 1 insertion(+), 8 deletions(-) diff --git a/xen/drivers/passthrough/amd/iommu_map.c b/xen/drivers/passthrough/amd/iommu_map.c index 31dc05d920..495ff5c831 100644 --- a/xen/drivers/passthrough/amd/iommu_map.c +++ b/xen/drivers/passthrough/amd/iommu_map.c @@ -785,9 +785,6 @@ void amd_iommu_share_p2m(struct domain *d) struct page_info *p2m_table; mfn_t pgd_mfn; - if ( !iommu_use_hap_pt(d) ) - return; - pgd_mfn = pagetable_get_mfn(p2m_get_pagetable(p2m_get_hostp2m(d))); p2m_table = mfn_to_page(mfn_x(pgd_mfn)); diff --git a/xen/drivers/passthrough/iommu.c b/xen/drivers/passthrough/iommu.c index 7fcbbb1f86..92ea26f8b4 100644 --- a/xen/drivers/passthrough/iommu.c +++ b/xen/drivers/passthrough/iommu.c @@ -332,8 +332,7 @@ void iommu_share_p2m_table(struct domain* d) { const struct iommu_ops *ops = iommu_get_ops(); - ASSERT( hap_enabled(d) ); - if ( iommu_enabled ) + if ( iommu_enabled && iommu_use_hap_pt(d) ) ops->share_p2m(d); } diff --git a/xen/drivers/passthrough/vtd/iommu.c b/xen/drivers/passthrough/vtd/iommu.c index 48676c5b53..891b9e302f 100644 --- a/xen/drivers/passthrough/vtd/iommu.c +++ b/xen/drivers/passthrough/vtd/iommu.c @@ -1789,9 +1789,6 @@ static void iommu_set_pgd(struct domain *d) struct hvm_iommu *hd = domain_hvm_iommu(d); mfn_t pgd_mfn; - if ( !iommu_use_hap_pt(d) ) - return; - pgd_mfn = pagetable_get_mfn(p2m_get_pagetable(p2m_get_hostp2m(d))); hd->arch.pgd_maddr = pagetable_get_paddr(pagetable_from_mfn(pgd_mfn)); } -- 2.30.2